/*****************************************************************************
 *   Copyright (C) 2008 John Schember <john@nachtimwald.com>                 *
 *                                                                           *
 *   This file is part of niwbillmanager.                                    *
 *                                                                           *
 *   niwbillmanager is free software: you can redistribute it and/or         *
 *   modify it under the terms of the GNU General Public License as          *
 *   published by the Free Software Foundation, either version 3 of the      *
 *   License, or (at your option) any later version.                         *
 *                                                                           *
 *   niwbillmanager is distributed in the hope that it will be useful,       *
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of          *
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the            *
 *   GNU General Public License for more details.                            *
 *                                                                           *
 *   You should have received a copy of the GNU General Public License       *
 *   along with niwbillmanager. If not, see                                  *
 *   <http://www.gnu.org/licenses/>.                                         *
 *****************************************************************************/

#ifndef TRANSACTION_H
#define TRANSACTION_H

#include <billitem.h>

/**
 * Represents a type of transaction.
 * Transactions can be any in TransactionTypes.
 */
class TransactionType
{
    public:
        enum TransactionTypes {
            INSERT,
            UPDATE,
            DELETE,
            UNKNOWN,
        };

        static QString transactionTypeToString(
            TransactionType::TransactionTypes transactionType);
        static TransactionType::TransactionTypes stringToTransactionType(
            QString transactionString);
};

/**
 * Represents a change to a bill item.
 * Specifies how it has changed and the id of the bill item that changed.
 * This is a short version of Transaction that only implements a subset
 * of the functionality.
 */
class ShortTransaction
{
    public:
        ShortTransaction();

        void setTransactionType(TransactionType::TransactionTypes
            transactionType);
        TransactionType::TransactionTypes getTransactionType() const;

        void setBillId(QString billId);
        QString getBillId();

    private:
        TransactionType::TransactionTypes m_transactionType;
        QString m_billId;
};

/**
 * Represents a change to a bill item.
 * Specifies how it has changed and the data that has changed with it.
 */
class Transaction
{
    public:
        Transaction();
        Transaction(TransactionType::TransactionTypes transactionType,
            BillItem billItem);

        void setTransactionType(TransactionType::TransactionTypes
            transactionType);
        TransactionType::TransactionTypes getTransactionType() const;

        void setBillItem(BillItem billItem);
        BillItem getBillItem() const;

    private:
        TransactionType::TransactionTypes m_transactionType;
        BillItem m_billItem;
};

#endif /* TRANSACTION_H */
